package com.xpf.controller;

import com.xpf.utils.RedisOperator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@ApiIgnore      //swagger2忽略此controller
@RestController //所有请求都是json对象
@RequestMapping("redis")
public class RedisController {

//    @Autowired
//    private RedisTemplate redisTemplate;

    @Autowired
    private RedisOperator redisOperator;

    @GetMapping("/set")
    public Object set(String key, String value){

//        redisTemplate.opsForValue().set(key, value);
        redisOperator.set(key, value);
        return "OK!";
    }

    @GetMapping("/get")
    public Object get(String key){

//        return redisTemplate.opsForValue().get(key);
        return redisOperator.get(key);
    }

    @GetMapping("/del")
    public Object del(String key){
//        redisTemplate.delete(key);
        redisOperator.del(key);
        return "delete OK!";
    }

    /**
     * 大量key查询
     * @param keys
     * @return
     */
    @GetMapping("/getALot")
    public Object getALot(String... keys){

        List<String> result = new ArrayList<>();
        for (String k : keys){
            String str = redisOperator.get(k);
            result.add(str);
        }
        return result;
    }

    /**
     * 大量key查询（使用批量查询mget 和get一样，一个一个建立连接，一个一个关闭，开销大）
     * @param keys
     * @return
     */
    @GetMapping("/mget")
    public Object mget(String... keys){
        List<String> keyList = Arrays.asList(keys);

        return redisOperator.mget(keyList);
    }

    /**
     * 大量key查询（使用批量查询pipeline 开一个管道，通过管道连接get和set）
     * @param keys
     * @return
     */
    @GetMapping("/batchGet")
    public Object batchGet(String... keys){
        List<String> keyList = Arrays.asList(keys);

        return redisOperator.batchGet(keyList);
    }

}
